package main

import (
	"fmt"
	"sync/atomic"
)

var counter int64 = 0 // 必须 int64/int32 才能原子操作

func Count() {
	// 原子递增并返回新值
	newVal := atomic.AddInt64(&counter, 1)
	fmt.Println(newVal)
}

func main() {
	for i := 0; i < 10; i++ {
		go Count()
	}

	// 自旋等待
	for {
		c := atomic.LoadInt64(&counter) // 原子读
		if c >= 10 {
			fmt.Println("main:", c)
			break
		}
	}
}
